package com.yingjia.yingjiauniversity.json;


import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.Map;

/**
 * <Json序列化和反序列化接口>
 *
 * @author: guoxiangxun
 * @date: 15 -11-26 下午3:17
 * @version: v1.0
 */
public interface JsonComponent {

    /**
     * Json字符串转Java对象
     *
     * @param <T>        the type parameter
     * @param jsonString the json string
     * @param c          the c
     * @param dateFormat the date format
     * @return t
     * @author: guoxiangxun
     * @date: Mar 29, 2017 9:05:48 PM
     * @version: v1.0
     */
    public <T> T toObject(String jsonString, Type c, String dateFormat);

    /**
     * inputStream转对象
     *
     * @param <T>        the type parameter
     * @param is         the is
     * @param c          the c
     * @param dateFormat the date format
     * @return t
     * @author: guoxiangxun
     * @date: Mar 29, 2017 9:05:48 PM
     * @version: v1.0
     */
    public <T> T toObject(InputStream is, Type c, String dateFormat);

    /**
     * <map转换为对象>
     *
     * @param <T> the type parameter
     * @param map the map
     * @param c   the c
     * @return the t
     * @author: guoxiangxun
     * @date: Mar 29, 2017 9:05:48 PM
     * @version: v1.0
     */
    public <T> T toObject(Map map, Type c);

    /**
     * Java对象转Json字符串
     *
     * @param object      目标对象
     * @param fields      排除字段
     * @param isExclusion the is exclusion
     * @param dateFormat  时间格式化
     * @return string
     * @author: guoxiangxun
     * @date: Mar 29, 2017 9:05:48 PM
     * @version: v1.0
     */
    public String toJson(Object object, String[] fields, Boolean isExclusion, String dateFormat);


    /**
     * <对象转换为map>
     *
     * @param object      the object
     * @param fields      the fields 需要单独处理的字段
     * @param isExclusion the is exclusion 是否需要排除字段, null不处理
     * @return the map
     * @author: guoxiangxun
     * @date: Mar 29, 2017 9:05:48 PM
     * @version: v1.0
     */
    public Map toMap(Object object, String[] fields, Boolean isExclusion);
}
